package com.example.understandvideo.tool;

import com.google.gson.JsonArray;
import com.google.gson.JsonElement;
import com.google.gson.JsonObject;
import com.google.gson.JsonParser;

import java.io.FileReader;
import java.io.IOException;
import java.io.Reader;
import java.util.ArrayList;
import java.util.Collection;
import java.util.Collections;
import java.util.List;

public class JsonUtils {
    /**
     * 读取JSON文件并提取指定字段的值
     *
     * @param strJson  JSON字符串
     * @return 字段的值，如果字段不存在则返回null
     */
    public static String extractContentFromStrJson(String strJson) {
        // 解析JSON文件
        JsonObject jsonObject = JsonParser.parseString(strJson).getAsJsonObject();
        // 提取字段值
        JsonElement choicesElement = jsonObject.get("choices");
        if (choicesElement.isJsonArray()) {
            JsonArray choicesArray = choicesElement.getAsJsonArray();
            for (JsonElement choiceElement : choicesArray) {
                if (choiceElement.isJsonObject()) {
                    JsonObject choice = choiceElement.getAsJsonObject();
                    JsonObject message = choice.getAsJsonObject("message");
                    if (message.has("content")) {
                        return message.get("content").getAsString();
                    }
                }
            }
        }
        return null;
    }


    public static String extractContentFromVoiceJson(String strJson) {
        // 解析JSON文件
        JsonObject jsonObject = JsonParser.parseString(strJson).getAsJsonObject();
        // 提取字段值
        JsonObject result = jsonObject.getAsJsonObject("result");
        if (result.has("text")) {
            return result.get("text").getAsString();
        }
        return null;
    }
    public static List<String> extractLineTextsFromStrJson(String StrJson) {
        System.out.println("Raw JSON Input: " + StrJson);
        try {
            JsonObject jsonObject = JsonParser.parseString(StrJson).getAsJsonObject();

            if (jsonObject.has("data") && jsonObject.get("data").isJsonObject()) {
                JsonObject dataObject = jsonObject.getAsJsonObject("data");

                if (dataObject.has("line_texts") && dataObject.get("line_texts").isJsonArray()) {
                    JsonArray lineTextsArray = dataObject.getAsJsonArray("line_texts");
                    List<String> lineTexts = new ArrayList<>();

                    for (JsonElement element : lineTextsArray) {
                        if (element.isJsonPrimitive()) {
                            lineTexts.add(element.getAsString());
                        } else if (element.isJsonNull()) {
                            lineTexts.add(null); // 或者跳过 null 值
                        }
                    }

                    return lineTexts;
                }
            }
        } catch (Exception e) {
            System.err.println("解析JSON失败: " + e.getMessage());
        }
        return Collections.emptyList();
    }



    /**
     * 读取JSON文件并提取指定字段的值
     *
     * @param filePath  JSON文件路径
     * @param fieldName 要提取的字段名
     * @return 字段的值，如果字段不存在则返回null
     */
    public static String extractFieldFromJson(String filePath, String fieldName) {
        try (Reader reader = new FileReader(filePath)) {
            // 解析JSON文件
            JsonObject jsonObject = JsonParser.parseReader(reader).getAsJsonObject();
            // 提取字段值
            JsonElement choicesElement = jsonObject.get("choices");
            if (choicesElement.isJsonArray()) {
                JsonArray choicesArray = choicesElement.getAsJsonArray();
                for (JsonElement choiceElement : choicesArray) {
                    if (choiceElement.isJsonObject()) {
                        JsonObject choice = choiceElement.getAsJsonObject();
                        JsonObject message = choice.getAsJsonObject("message");
                        if (message.has(fieldName)) {
                            return message.get(fieldName).getAsString();
                        }
                    }
                }
            }
        } catch (IOException e) {
            e.printStackTrace();
        }
        return null;
    }

    public static void main(String[] args) {
        String filePath = "D:\\home\\work\\rivulet-dawn\\result\\2025-04-25\\name.json";
        String fieldName = "content";
        String fieldValue = extractFieldFromJson(filePath, fieldName);
        System.out.println("Field value: " + fieldValue);
    }
}
